package com.taotao.service.serviceImpl;

import java.util.Date;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.taotao.common.bean.EUDataGridResult;
import com.taotao.common.bean.TaotaoResult;
import com.taotao.common.utils.IDUtils;
import com.taotao.mapper.TbItemDescMapper;
import com.taotao.mapper.TbItemMapper;
import com.taotao.mapper.TbItemParamItemMapper;
import com.taotao.pojo.TbItem;
import com.taotao.pojo.TbItemDesc;
import com.taotao.pojo.TbItemExample;
import com.taotao.pojo.TbItemExample.Criteria;
import com.taotao.pojo.TbItemParamItem;
import com.taotao.service.ItemService;

@Service
public class ItemServiceImpl implements ItemService {

	@Autowired
	private TbItemMapper itemMapper;

	@Autowired
	private TbItemParamItemMapper itemParamItemMapper;

	@Autowired
	private TbItemDescMapper itemDescMapper;
	
	/**
	 * 商品列表
	 * @param page 第几页
	 * @param rows 每页多少条记录
	 */
	public EUDataGridResult getItemList(int page, int rows) {
		// 查询列表
		TbItemExample example = new TbItemExample();
		// 设置分页
		PageHelper.startPage(page, rows);
		// 查询商品列表
		List<TbItem> list = itemMapper.selectByExample(example);
		// 创建返回对象
		EUDataGridResult result = new EUDataGridResult();
		// 设置行数
		result.setRows(list);
		// 获取并且设置总记录数
		PageInfo<TbItem> pageInfo = new PageInfo<>(list);
		long total = pageInfo.getTotal();
		result.setTotal(total);
		return result;
	}

	/**
	 * 添加商品
	 * 
	 * @param item       商品
	 * @param desc       商品描述
	 * @param itemParams 商品规格参数
	 */
	public TaotaoResult createItem(TbItem item, String desc, String itemParams) throws Exception {
		// 补全item信息
		long itemId = IDUtils.genItemId();
		item.setId(itemId);
		// 补全商品状态：1-正常；2-下架；3-删除
		item.setStatus((byte) 1);
		// 创建时间及其更新时间
		item.setCreated(new Date());
		item.setUpdated(new Date());

		// 插入商品表
		itemMapper.insert(item);

		// 插入到商品规格和商品的关系表 tb_item_param_item
		TaotaoResult itemParamItemResult = insertItemParamItem(itemId, itemParams);

		// 插入商品描述表
		TaotaoResult ItemDescResult = insertItemDesc(itemId, desc);

		if (ItemDescResult.getStatus() != 200) {
			throw new Exception();
		}
		if (itemParamItemResult.getStatus() != 200) {
			throw new Exception();
		}
		return TaotaoResult.ok();
	}

	/**
	 * 更新商品
	 * 
	 * @throws Exception
	 */
	public TaotaoResult updateItem(TbItem item, String desc, String itemParams) throws Exception {
		// 获取商品id和商品类目id
		Long itemId = item.getId();
		Long cid = item.getCid();
		// 更新更新时间
		item.setUpdated(new Date());
		TbItemExample example = new TbItemExample();
		Criteria criteria = example.createCriteria();
		criteria.andIdEqualTo(itemId);

		// 更新商品类目
		TaotaoResult result1 = updateItemParamItem(itemId, itemParams);

		// 更新商品描述
		TaotaoResult result2 = updateItemDesc(itemId, desc);

		//更新商品
		itemMapper.updateByExampleSelective(item, example);

		if (result1.getStatus() != 200) {
			throw new Exception();
		}
		if (result2.getStatus() != 200) {
			throw new Exception();
		}
		return TaotaoResult.ok();
	}

	/**
	 * 更新商品描述
	 * 
	 * @param itemId
	 * @param desc
	 * @return
	 */
	private TaotaoResult updateItemDesc(Long itemId, String desc) {
		TbItemDesc itemDesc = new TbItemDesc();
		itemDesc.setItemId(itemId);
		itemDesc.setItemDesc(desc);
		itemDesc.setUpdated(new Date());
		itemDescMapper.updateByPrimaryKeySelective(itemDesc);
		return TaotaoResult.ok();
	}

	/**
	 * 更新商品类目
	 * 
	 * @param itemId     商品id
	 * @param itemParams
	 * @return
	 */
	private TaotaoResult updateItemParamItem(Long itemId, String itemParams) {
		TbItemParamItem itemParamItem = new TbItemParamItem();
		itemParamItem.setItemId(itemId);
		itemParamItem.setParamData(itemParams);
		itemParamItem.setUpdated(new Date());
		itemParamItemMapper.updateByPrimaryKeySelective(itemParamItem);
		return TaotaoResult.ok();
	}

	/**
	 * 插入到商品规格和商品的关系表
	 *  tb_item_param_item
	 * 
	 * @param itemId     商品信息
	 * @param itemParams 商品规格
	 * @return TaotaoResult.ok()
	 */
	private TaotaoResult insertItemParamItem(long itemId, String itemParams) {
		TbItemParamItem itemParamItem = new TbItemParamItem();
		itemParamItem.setItemId(itemId);
		itemParamItem.setParamData(itemParams);
		itemParamItem.setCreated(new Date());
		itemParamItem.setUpdated(new Date());
		itemParamItemMapper.insert(itemParamItem);
		return TaotaoResult.ok();

	}

	/**
	 * 插入商品描述表
	 * 
	 * @param itemId 商品id
	 * @param desc   商品描述信息
	 * @return
	 */
	private TaotaoResult insertItemDesc(long itemId, String desc) {
		// 创建商品描述 pojo
		TbItemDesc itemDesc = new TbItemDesc();
		// 补全商品描述信息
		// id
		itemDesc.setItemId(itemId);
		// 描述
		itemDesc.setItemDesc(desc);
		// 创建时间和更新时间
		itemDesc.setCreated(new Date());
		itemDesc.setUpdated(new Date());
		// 插入TbItemDesc
		itemDescMapper.insert(itemDesc);
		return TaotaoResult.ok();

	}

	@Override
	
	/**
	 * 获取商品描述
	 * @Param itemId 商品id
	 */
	public TaotaoResult getItemDesc(long itemId) {
		TbItemDesc desc = itemDescMapper.selectByPrimaryKey(itemId);
		return TaotaoResult.ok(desc);
	}

	@Override
	public TaotaoResult getItemParamItem(long itemId) {
		TbItemParamItem itemParamItem = itemParamItemMapper.selectByPrimaryKey(itemId);
		return TaotaoResult.ok(itemParamItem);
	}

	

}
